1   package com.iluwatar;
2   
3   import java.util.List;
4   
5   public class TreasureChestItemIterator implements ItemIterator {
6   
7   	private TreasureChest chest;
8   	private int idx;
9   	private ItemType type;
10  
11  	public TreasureChestItemIterator(TreasureChest chest, ItemType type) {
12  		this.chest = chest;
13  		this.type = type;
14  		this.idx = -1;
15  	}
16  
17  	@Override
18  	public boolean hasNext() {
19  		return findNextIdx() != -1;
20  	}
21  
22  	@Override
23  	public Item next() {
24  		idx = findNextIdx();
25  		if (idx != -1) {
26  			return chest.getItems().get(idx);
27  		}
28  		return null;
29  	}
30  
31  	private int findNextIdx() {
32  
33  		List<Item> items = chest.getItems();
34  		boolean found = false;
35  		int tempIdx = idx;
36  		while (!found) {
37  			tempIdx++;
38  			if (tempIdx >= items.size()) {
39  				tempIdx = -1;
40  				break;
41  			}
42  			if (type.equals(ItemType.ANY)
43  					|| items.get(tempIdx).getType().equals(type)) {
44  				break;
45  			}
46  		}
47  		return tempIdx;
48  	}
49  }